﻿/// 写一个给Array数组和ArrayList数组的求和、平均算法

// using System.Collections;
//
// namespace cs_basic_19 {
//     class Program {
//         static void Main(string[] args) {
//             int[] array = { 1, 2, 3, 4, 5, 6 };
//             ArrayList  list = new ArrayList(){1,2,3,4,5,6};
//             // Console.WriteLine(Sum1(array));
//             // Console.WriteLine(Avg1(array));
//             // Console.WriteLine(Sum2(list));
//             // Console.WriteLine(Avg2(list));
//             Console.WriteLine(Sum(array));
//             Console.WriteLine(Avg(array));
//             Console.WriteLine(Sum(list));
//             Console.WriteLine(Avg(list));
//         }
//         static int Sum(IEnumerable array) {
//             int sum = 0;
//             foreach (var VARIABLE in array) {
//                 sum += (int)VARIABLE;
//             }
//             return sum;
//         }
//
//         static double Avg(IEnumerable array) {
//             int count = 0;
//             double sum = 0;
//             foreach (var VARIABLE in array) {
//                 count++;
//                 sum += (int)VARIABLE;
//             }
//             return sum / count;
//         }
//     /*
//         static int Sum1(int[] array) {
//             int sum = 0;
//             foreach (var VARIABLE in array) {
//                 sum += VARIABLE;
//             }
//             return sum;
//         }
//
//         static double Avg1(int[] array) {
//             int count = 0;
//             double sum = 0;
//             foreach (var VARIABLE in array) {
//                 count++;
//                 sum += VARIABLE;
//             }
//             return sum / count;
//         }
//
//         static int Sum2(ArrayList array) {
//             int sum = 0;
//             foreach (var VARIABLE in array) {
//                 sum+=(int)VARIABLE;
//             }
//             return sum;
//         }
//         static double Avg2(ArrayList array) {
//             int count = 0;
//             double sum = 0;
//             foreach (var VARIABLE in array) {
//                 count++;
//                 sum += (int)VARIABLE;
//             }
//             return sum / count;
//         }
//         */
//     }
// }
/// 紧耦合

// namespace cs_basic_19 {
//     class Program {
//         static void Main(string[] args) {
//             var engine = new Engine();
//             var car = new Car(engine);
//             car.Run(3);
//             Console.WriteLine(car.Speed);
//         }
//     }
//
//     class Engine {
//         public int RPM { get;private set; }
//
//         public void Work(int gas) {
//             this.RPM = 1000*gas;
//         }
//     }
//
//     class Car {
//         private Engine _engine;
//         public int Speed { get; set; }
//
//         public Car(Engine engine) {
//             _engine = engine;
//         }
//
//         public void Run(int gas) {
//             _engine.Work(gas);
//             this.Speed = _engine.RPM/30;
//         }
//     }
// }


/// 松耦合
///

namespace cs_basic_19 {
    class Program {
        static void Main(string[] args) {
            NokiaPhone nokiaPhone = new NokiaPhone();
            EricssonPhone ericssonPhone = new EricssonPhone();
            PhoneUser user = new PhoneUser(nokiaPhone);
            user.UsePhone();
            user = new PhoneUser(ericssonPhone);
            user.UsePhone();
        }
    }

    class PhoneUser {
        private Iphone _phone{get;set;}

        public PhoneUser(Iphone phone) {
            _phone = phone;
        }

        public void UsePhone() {
            _phone.Dail();
            _phone.PickUp();
            _phone.Receive();
            _phone.Send();
        }
        
    }
    interface Iphone {
        void Dail();
        void PickUp();
        void Send();
        void Receive();
    }

    class NokiaPhone : Iphone {
        public void Dail() {
            Console.WriteLine("Nokia calling...");
        }

        public void PickUp() {
            Console.WriteLine("Hello this is Nokia");
        }

        public void Send() {
            Console.WriteLine("诺基亚发送一个短信");
        }

        public void Receive() {
            Console.WriteLine("Nokia收到了短信");
        }
    }

    class EricssonPhone : Iphone {
        public void Dail() {
            Console.WriteLine("Ericsson calling...");
        }

        public void PickUp() {
            Console.WriteLine("Ericsson this is Nokia");
        }

        public void Send() {
            Console.WriteLine("Ericsson发送一个短信");
        }

        public void Receive() {
            Console.WriteLine("Ericsson收到了短信");
        }
    }
}

